#ifndef VEC_DECL_H_
#define VEC_DECL_H_
// 声明vector结构体及操作函数（宏版）
#define DECL_VEC(TYPE)                                                         \
    typedef struct {                                                           \
        TYPE *data;       /* 数据存储指针 */                                   \
        size_t begin_idx; /* 有效数据起始索引（预留空间）*/                    \
        size_t size;      /* 当前有效元素数量 */                               \
        size_t capacity;  /* 总容量 */                                         \
    } ctl_vec_##TYPE;                                                          \
    /* 函数声明 */                                                             \
    size_t ctl_vec_##TYPE##_size(ctl_vec_##TYPE *vec);                         \
    size_t ctl_vec_##TYPE##_begin_idx(ctl_vec_##TYPE *vec);                    \
    int ctl_vec_##TYPE##_ctor_by_size(ctl_vec_##TYPE *vec, size_t size);       \
    int ctl_vec_##TYPE##_ctor(ctl_vec_##TYPE *vec);                            \
    void ctl_vec_##TYPE##_dtor(ctl_vec_##TYPE *vec);                           \
    int ctl_vec_##TYPE##_copy(ctl_vec_##TYPE *dst, const ctl_vec_##TYPE *src); \
    int ctl_vec_##TYPE##_set_at(ctl_vec_##TYPE *vec, size_t index,             \
                                const TYPE data);                              \
    int ctl_vec_##TYPE##_get_at(ctl_vec_##TYPE *vec, size_t index,             \
                                TYPE *data);                                   \
    int ctl_vec_##TYPE##_push_back(ctl_vec_##TYPE *vec, const TYPE data);      \
    int ctl_vec_##TYPE##_pop_back(ctl_vec_##TYPE *vec, TYPE *data);            \
    int ctl_vec_##TYPE##_reserve(ctl_vec_##TYPE *vec, size_t new_capacity);    \
    int ctl_vec_##TYPE##_resize(ctl_vec_##TYPE *vec, size_t new_size);
#endif